#include <iostream>
#include <vector>

using namespace std;

typedef pair<int, int> PII;

const int N = 35;

int n;
vector<int> p[N]; // 创建 n 个放木块的槽


PII find(int x)
{
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < p[i].size(); j++)
		{
			if(p[i][j] == x)
			{
				return {i, j};
			}
		}
	}
	return {-1, -1};
} 

void clean(int x, int y)
{
	// 把 [x, y] 以上的木块归位
	for(int j = y + 1; j < p[x].size(); j++)
	{
		int t = p[x][j];
		p[t].push_back(t);
	}

	p[x].resize(y + 1);
}

void move(int x1, int y1, int x2)
{
	// 把 [x1, y1] 及其以上的木块，放在 x2 上面
	for(int i = y1; i < p[x1].size(); i++)
	{
		p[x2].push_back(p[x1][i]);
	}

	p[x1].resize(y1);
}

int main()
{
	//归位：把x上方的归位
	//移动：把 x 及 x 上的放到 y上 ---> 遍历数组，将元素复制到y，然后修改 x 的size
	cin >> n;
	//初始化
	for(int i = 0; i < n; i++)
	{
		p[i].push_back(i);
	}

	string op1, op2;
	int a, b;
	while(cin >> op1 >> a >> op2 >> b)
	{
		//查找 a 和 b 的位置（行,列）
		PII pa = find(a);
		int x1 = pa.first, y1 = pa.second;
		PII pb = find(b);
		int x2 = pb.first, y2 = pb.second;

		if(x1 == x2) continue;

		if(op1 == "move") // 把 a 上方归位
		{
			clean(x1, y1);
		}
		if(op2 == "onto") // 把 b 上方归位
		{
			clean(x2, y2);
		}

		move(x1, y1, x2); // 把 a 及以上的木块移到 b 上
	}

	//打印
	for(int i = 0; i < n; i++)
	{
		cout << i << ":";
		for(int j = 0; j < p[i].size(); j++)
		{
			cout << " " << p[i][j];
		}
		cout << endl;
	}

	return 0;
}
